草庐IT

java treeset 抛出 illegalArgumentException : key out of range

全部标签

c++ - 如何使用隐式虚拟析构函数正确解决不兼容的抛出说明符?

此代码无法编译:#include/*relevantpart:structQString{~QString()noexcept(false){};};*/classBase{public:virtual~Base()=default;};classDerived:publicBase{QStringstring_;};intmain(){return0;}错误是:error:looserthrowspecifierfor'virtualDerived::~Derived()'error:overriding'virtualBase::~Base()noexcept(true)'我没有使

c++ - double 到 string 到 double 的转换抛出异常

以下代码在VisualStudio2013中引发了std::out_of_range异常,我认为它不应该:#include#includeintmain(intargc,char**argv){doublemaxDbl=std::stod(std::to_string(std::numeric_limits::max()));return0;}我也用gcc4.9.2测试了代码,它没有抛出异常。该问题似乎是由转换为字符串后不准确的字符串表示引起的。在VisualStudio中std::to_string(std::numeric_limits::max())产量1797693134862

android - C++ 运算符 new 和 new[] 会在 Android 上抛出 std::bad_alloc 吗?

分配内存失败会抛出异常吗?我最近才知道Android支持异常。 最佳答案 我下载了ndk并在文档文件夹CPLUSPLUS-SUPPORT.HTML中找到了它。I.C++Exceptionssupport:TheNDKtoolchainsupportsC++exceptions,sinceNDKr5,howeverallC++sourcesarecompiledwith-fno-exceptionssupportbydefault,forcompatibilityreasonswithpreviousreleases.Toenable

c++ - 如果 Visual Studio 2012 抛出 VS2012 不应存在的编译错误,这意味着什么?

当我编译一些使用boost序列化的类时,出现编译错误C2996,请参阅下面的消息本身。如果我查找此错误,似乎此错误仅由更旧版本的编译器引发。怎么会这样?错误信息:E:\Lib\boost_1_54_0\boost/serialization/split_member.hpp(42):errorC2996:'boost::hash_combine':recursivefunctiontemplatedefinitionVS2013、VS2012以及VS2012Update4显示了此行为。 最佳答案 我遇到了类似的问题。在我看来,这就像

c# - 为什么 CLS 要求抛出/捕获异常派生对象?

CLS比CLR更具限制性,CLR允许您抛出和捕获任何类型的对象(甚至是值类型)。为什么?此外,如果某些不符合CLS的代码在被符合CLS的代码调用时抛出非异常派生对象,会发生什么情况?更新@Marton回答的第二个问题。仍然想知道为什么。 最佳答案 CLS指定了许多应用程序所需的最少语言功能集,如果API仅使用这些功能,则任何符合CLS的语言都可以使用它。所以它自然比CLR更受限制。另一方面,CLR旨在处理来自任何符合CLI的语言的托管代码。允许抛出不符合CLS的异常(那些不是从System.Exception派生的)的语言示例是C+

c++ - 面对抛出移动构造函数/赋值运算符,std::vector::emplace() 是否真的提供了强大的异常保证?

Accordingtocppreference.com,std::vector::emplace()无条件提供强异常保证:Ifanexceptionisthrown(e.g.bytheconstructor),thecontainerisleftunmodified,asifthisfunctionwasnevercalled(strongexceptionguarantee).但是,在GCC7.1.1的实践中似乎并非如此。以下程序:#include#includestructugly{inti;ugly(inti):i{i}{}ugly(constugly&other)=defaul

c++ - std::promise<void> 抛出未知错误,除非调用 sleep

我有这个代码:#include#includeintmain(){std::promisep;p.set_value();p.get_future().get();return0;}用gcc编译后抛出std::system_error:$g++-ofoofoo.cpp-std=c++11-lpthread$./footerminatecalledafterthrowinganinstanceof'std::system_error'what():Unknownerror-1奇怪的是,在创建promise之前添加零秒sleep,防止了异常:intmain(){std::this_thre

c++ - 在构造函数中抛出异常是否不安全?

我知道从析构函数中抛出异常是不安全的,但是从构造函数中抛出异常是否不安全?例如全局声明的对象会发生什么?使用gcc进行快速测试,我得到中止,总是有保证吗?您会使用什么解决方案来应对这种情况?在任何情况下,构造函数都可以抛出异常而不按照我们的预期进行。编辑:我想我应该补充一点,我试图了解在什么情况下我可能会发生资源泄漏。看起来明智的做法是在抛出异常之前手动释放我们在构造过程中获得的资源。在今天之前,我从来不需要在构造函数中抛出异常,所以试图了解是否存在任何陷阱。即这也安全吗?classP{public:P(){//dostuff...if(error)throwexception}}do

c++ - 如果我无法承受抛出异常时的低性能,我可以使用 STL 吗?

例如,我正在编写一个实时处理和流式传输音频的多线程时间关键型应用程序。音频中断是完全不能接受的。这是否意味着我不能使用STL,因为抛出异常时速度可能会变慢? 最佳答案 通常,如果new失败,STL容器自己抛出的唯一异常是std::bad_alloc。唯一的其他时间是用户代码(例如构造函数、赋值、复制构造函数)抛出。如果您的用户代码从不抛出异常,那么您只需要防止新的异常抛出,这很可能是您无论如何都必须做的。其他可以抛出异常的东西:-如果您越界访问at()函数,它们可能会抛出std::out_of_range。无论如何,这是一个严重的程

c++ - 调用 get() 后 std::future 仍然有效(抛出异常)

根据cppreference,在调用std::future::get之后:valid()isfalseafteracalltothismethod.此外,来自cplusplus.com:Oncethesharedstateisready,thefunctionunblocksandreturns(orthrows)releasingitssharedstate.Thismakesthefutureobjectnolongervalid:thismemberfunctionshallbecalledonceatmostforeveryfuturesharedstate.在异常安全下:Th